package com.xahj.bd2104.spark.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * Created with IntelliJ IDEA.
 * Author: Amos
 * E-mail: amos@amoscloud.com
 * Date: 2021/9/15
 * Time: 10:51
 * Description: 
 */
object SparkCoreDemo9_分区获益操作 {
  def main(args: Array[String]): Unit = {
    // rdd1:RDD[(K,V)]
    // rdd2:RDD[(K,W)]
    // cogroup
    // rdd1.cogroup(rdd2) => RDD[(K,( Iterable[V],Iterable[W] ))]

    // rdd3= rdd1.groupByKey=> RDD[(K,Iterator[V])]
    // rdd4= rdd2.groupByKey=> RDD[(K,Iterator[W])]
    // rdd3.fullOuterJoin(rdd4) => RDD[(K,( Option[Iterable[V]],Option[Iterable[W]] ))]

    // rdd5:RDD[(K,V)]
    // rdd6:RDD[(K,W)]

    // rdd5.join(rdd6) => RDD[(K,(V,W))]

    //val rdd7 = rdd5.union(rdd6)=>RDD[(K,V)]
    // rdd7.groupByKey() => RDD[(K,Iterator[V])]


    val sc = new SparkContext(new SparkConf()
      .setAppName("demo8")
      .setMaster("local[2]"))


    val rdd: RDD[String] = sc.textFile("C:\\projects\\idea\\bigdata2104\\amos\\amos-hadoop\\src\\main\\resources\\logs")
    //    val count = rdd.count()
    //    println(count)

    // textFile读取方式会将文件按行读取，每行作为RDD的一个元素
    // 在读取大量小文件时，读取效率较差
    // 可以使用Spark实现的另外一种读取方式wholeTextFiles
    //  将每个文件进行一次IO，读取整个文件
    //  将文件路径作为RDD的K  文件内容作为RDD的V

    val rdd1: RDD[(String, String)] = sc.wholeTextFiles("C:\\projects\\idea\\bigdata2104\\amos\\amos-hadoop\\src\\main\\resources\\logs")
    val count1 = rdd1.count()

    rdd1.foreach(t => {
      println(t._1)
      println(t._2.length)
    })
    println(count1)

  }
}
